# -*- coding: UTF-8 -*-
"""
    TweMoi, aplicación Android para la interacción con redes sociales
    Copyright (C) 2011
        * Autor: Moisés Vázquez Sánchez
        * Tutor: Jesús M. González Barahona
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as
    published by the Free Software Foundation, either version 3 of the
    License, or (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
"""

import cgi

from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from xml.sax import parseString

import models
import httplib
import xmlParserTwitter

class Twitter(webapp.RequestHandler):
    
    def get(self):
        user = users.get_current_user()
        
        if (not(user)):
            self.redirect("/", True)

        self.response.out.write("""
          <html>
            <body>
              <form action="/cuentas/twitter" method="post">
                <div>Nombre de usuario: <input name="red"></input></div>
                <div>Comentario: <textarea name="comment"></textarea></div>
                <div><input type="submit" value="Guardar datos Twitter"></div>
              </form>
            </body>
          </html>""")
        
    def post(self):
        user = users.get_current_user()
        if user:        
            red = models.Red()
            red.author = user
            red.tipo_red = "Twitter"
            
            red.user_red = cgi.escape(self.request.get('red'))
            red.content = cgi.escape(self.request.get('comment'))
            red.put()
            
            
            users = models.Usuario.all().filter('user_twemoi = ', user.nickname())

            user = users.get()
            if (user != None):
                user.urlImage = "http://api.twitter.com/1/users/profile_image/"+ cgi.escape(self.request.get('red')) + ".json?size=bigger"
                user.put()
            # ----- Conect to Twitter - ID User -----
            # Headers message
            headers = { "Host": "api.twitter.com",
                        "User-Agent": "TweMoi",
                        "Content-Type" : "text/html"}
                
            con = httplib.HTTPConnection("api.twitter.com")
            con.request("GET", "/1/statuses/friends.xml?screen_name=" + red.user_red,headers)
            r1 = con.getresponse()
            body = r1.read()
            # ----- End connect Identi.ca - ID User -----
            
            # Load parser and driver
            theHandler = xmlParserTwitter.parserTwitter(user)
        
            # Parser RSS
            parseString(body,theHandler)
        
            # Get list whith links
            listUsuarios = theHandler.getAmigos()
            
            cad = ""
            for a in listUsuarios:
                cad = cad + a.nombre_amigo + " " + a.urlImage
                a.put()
            
            self.response.out.write(cad)
            
            #self.redirect("/", True)
        else:
            self.redirect("/", True)
    
class Facebook(webapp.RequestHandler):
    def get(self):
        user = users.get_current_user()
        
        if (not(user)):
            self.redirect("/", True)

        self.response.out.write("""
          <html>
            <body>
              <form action="/cuentas/facebook" method="post">
                <div>Nombre de usuario: <input name="red"></input></div>
                <div>Comentario: <textarea name="comment"></textarea></div>
                <div><input type="submit" value="Guardar datos Facebook"></div>
              </form>
            </body>
          </html>""")
        
    def post(self):
        user = users.get_current_user()
        if user:        
            red = models.Red()
            red.author = user
            red.tipo_red = "FaceBook"
            
            red.user_red = cgi.escape(self.request.get('red'))
            red.content = cgi.escape(self.request.get('comment'))
            red.put()

            self.response.out.write("Anadida la red de Facebook correctamente")
        else:
            self.redirect("/", True)

class Buzz(webapp.RequestHandler):

    def get(self):
        self.response.out.write("Me han llamado a Buzz")

class Linkedin(webapp.RequestHandler):

    def get(self):
        self.response.out.write("Me han llamado a Linkedin")

class Status(webapp.RequestHandler):

    def get(self):
        self.response.out.write("Me han llamado a status")
        
class EstablecerCuentas (webapp.RequestHandler):
    
    def post (self):
        user = users.get_current_user()
        if user:
            contenido = self.request.get('content')
            list_cont = contenido.split(":")

            for red in list_cont:
                list_red = red.split("_")
                if (list_red[1] != "not"):
                    red = models.Red()
                    red.author = user
                    red.user_twemoi = user.nickname()
                    red.tipo_red = list_red[0]
                    red.user_red = list_red[1]
                    red.put()
                    
                    if (red.tipo_red == "Twitter"):
                        # Comprobamos que el usuario esta creado.
                        entity = models.Usuario.get_by_key_name(user.nickname())

                        if entity is None:
                            u = models.Usuario(author = user,
                                               user_twemoi = user.nickname(),
                                               urlImage = "http://api.twitter.com/1/users/profile_image/" + list_red[1] + ".json?size=bigger")
                            u.put()
                        else:
                            entity.urlImage = "http://api.twitter.com/1/users/profile_image/" + list_red[1] + ".json?size=bigger"
                            entity.put()
                                                
                        # ----- Conect to Twitter - ID User -----
                        # Headers message
                        headers = { "Host": "api.twitter.com",
                                    "User-Agent": "TweMoi",
                                    "Content-Type" : "text/html"}
                        
                        con = httplib.HTTPConnection("api.twitter.com")
                        con.request("GET", "/1/statuses/friends.xml?screen_name=" + red.user_red,headers)
                        r1 = con.getresponse()
                        body = r1.read()
                        # ----- End connect Identi.ca - ID User -----
                        
                        # Load parser and driver
                        theHandler = xmlParserTwitter.parserTwitter(user)
                    
                        # Parser RSS
                        parseString(body,theHandler)
                    
                        # Get list whith links
                        listUsuarios = theHandler.getAmigos()
                        
                        cad = ""
                        for a in listUsuarios:
                            cad = cad + a.nombre_amigo + " " + a.urlImage
                            a.put()        
            
            # Ahora debemos de retornar el resultado que será cuantos amigos tiene iguales.
            query = models.Amigo.all().filter('user_twemoi = ', user.nickname())
        
            amigos = query.get()
            if (amigos == None):
                return

            respuesta = ""            
            for amigo in query:
                query_User = models.Usuario.all().filter('user_twemoi =', amigo.nombre_amigo)
                if (query_User.get() != None):
                    # Comenzamos a generar los usuarios que puede conocer.
                    respuesta = respuesta + "<user>"
                    respuesta = respuesta + "<user_twemoi>" + amigo.nombre_amigo + "</user_twemoi>"
                    respuesta = respuesta + "<user_imagen>" + amigo.urlImage + "</user_imagen>"
                    query_red = models.Red.all().filter('user_twemoi =', amigo.nombre_amigo)

                    for conocido in query_red:
                        respuesta = respuesta + "<red>"
                        respuesta = respuesta + "<nombre>"
                        respuesta = respuesta + conocido.tipo_red
                        respuesta = respuesta + "</nombre>"
                        respuesta = respuesta + "<user_red>"
                        respuesta = respuesta + conocido.user_red
                        respuesta = respuesta + "</user_red>"
                        respuesta = respuesta + "</red>"

                    respuesta = respuesta + "</user>"
                      
            self.response.out.write(respuesta)

        else:
            self.response.out.write("Imposible encontrar amigos la cuenta no es valida")

application = webapp.WSGIApplication(
                                     [('/cuentas/twitter', Twitter),
                                      ('/cuentas/facebook', Facebook),
                                      ('/cuentas/linkedin', Linkedin),
                                      ('/cuentas/buzz', Buzz),
                                      ('/cuentas/status', Status),
                                      ('/cuentas/establecerCuentas', EstablecerCuentas),
                                      ],debug=True)
def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()
